/*
 * @Authoryour name
 * @Date2020-12-19 23:54:57
 * @LastEditTime2020-12-19 23:54:57
 * @LastEditorsyour name
 * @DescriptionIn User Settings Edit
 * @FilePath\STM32H750_FreeRTOS\Bsp\bsp_tim\bsp_tim.c
 */ 

#include "bsp_tim.h"
#include "bsp_gpio.h"

static void _tim_gpio_init(void);
static void _tim_module_init(void);
static void _tim_gpio_deinit(void);
static void _tim_module_deinit(void);

static TIM_HandleTypeDef tim_handle;

void bsp_tim_init(void)
{
    _tim_gpio_init();
    _tim_module_init();
}

void bsp_tim_deinit(void)
{
    _tim_module_deinit();
    _tim_gpio_deinit();
}

static void _tim_gpio_deinit(void)
{

}

static void _tim_module_deinit(void)
{
    HAL_NVIC_DisableIRQ(TIM2_IRQn);
    HAL_TIM_Base_DeInit(&tim_handle);
    __HAL_RCC_TIM2_CLK_DISABLE();
}

static void _tim_gpio_init(void)
{

}

static void _tim_module_init(void)
{
    /* Clock Enable */
    __HAL_RCC_TIM2_CLK_ENABLE();
    /* NVIC Config */
    HAL_NVIC_SetPriority(TIM2_IRQn, 0, 3);
    HAL_NVIC_EnableIRQ(TIM2_IRQn);
    /* TIM Init */
    tim_handle.Instance               = TIM2;
    tim_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
    tim_handle.Init.ClockDivision     = TIM_CLOCKDIVISION_DIV2;
    tim_handle.Init.CounterMode       = TIM_COUNTERMODE_UP;
    /* APB1 200MHz  */
    tim_handle.Init.Prescaler         = 199; /* 200M / (199 + 1) = 1M */
    tim_handle.Init.Period            = 1000; /* 1M / 1000 = 1ms */ 

    if(HAL_TIM_Base_Init(&tim_handle) != HAL_OK)
    {
        ExprAssertCalled(__FILE__, __LINE__);
    }

    __HAL_TIM_ENABLE_IT(&tim_handle, TIM_IT_UPDATE);
    __HAL_TIM_ENABLE(&tim_handle);
}


void TIM2_IRQHandler(void)
{
    if(__HAL_TIM_GET_FLAG(&tim_handle, TIM_FLAG_UPDATE) == TRUE)
    {
        HAL_IncTick();
        // bsp_gpio_toggle(GPIO_B1);
        __HAL_TIM_CLEAR_FLAG(&tim_handle, TIM_FLAG_UPDATE);
    }
}

